1. 题目描述(中等难度)

[success] 111. 二叉树的最小深度

2. 解法一: DFS

求最小深度时将Math.max换成Math.min即可,但要注意如果根节点的左或右子树为空的话是构不成子树的。而最小深度是要求从根节点到子树的。当左或右子树为空时,不符合要求。

class Solution {

    public int minDepth(TreeNode root) {
      if(root == null){
          return 0;
      }
      if(root.left == null && root.right != null){
          return minDepth(root.right)+1;
      }
      if(root.left != null && root.right == null){
          return minDepth(root.left)+1;
      }
      return Math.min(minDepth(root.left),minDepth(root.right)) +1;
    }

}

3. 解法二:DFS求所有路径,再对路径求最小

class Solution {
    List<List<Integer>> ans = new ArrayList<>();
    public int minDepth(TreeNode root) {
       if(root == null){
           return 0;
       }
       Integer min = Integer.MAX_VALUE;
       dfs(root,new ArrayList<>());
       for(int i=0;i<ans.size();i++){
          List<Integer> list = ans.get(i);
          min = Math.min(min,list.size());
       }
       return min;
    }

    public void dfs(TreeNode root,List<Integer> list){
        if(root == null){
            return;
        }
        list.add(root.val);
        if(root.left == null && root.right == null){
            ans.add(list);
        }
        else{
           dfs(root.left,new ArrayList<>(list));
           dfs(root.right,new ArrayList<>(list)); 
        }
    }
}
© gaohueric all right reserved,powered by Gitbook文件修订时间: 2021-12-08 23:22:22

results matching ""

    No results matching ""